--pull xmlFileName
use arg xmlFileName
rexxObject=.saxHandler~new
rexxProxy=BsfCreateRexxProxy(rexxObject)
objArray=bsf.createArray(bsf.loadClass("java.lang.Object"), 1)
objArray[1]="org.xml.sax.ContentHandler"
javaProxy =rexxProxy~newJavaProxyInstance(objArray)

rexxObject2=.dtdh~new
rexxProxy2=BsfCreateRexxProxy(rexxObject2)

objArray2=bsf.createArray(bsf.loadClass("java.lang.Object"), 1)
objArray2[1]="org.xml.sax.DTDHandler"
javaProxy2=rexxProxy2~newJavaProxyInstance(objArray2)

parser=bsf.loadClass("org.xml.sax.helpers.XMLReaderFactory")~createXMLReader
parser~setContentHandler(javaProxy)
parser~setDTDHandler(javaProxy2)

parser~parse(xmlFileName)

-- --------------

::requires BSF.CLS

::class "dtdh"

::method unparsedEntityDecl
    use arg name, publicId, systemId, notationName
    say pp(.bsf~new("java.lang.String", name, publicId, systemId, notationName)~toString)

::method notationDecl
    use arg name, publicId, systemId
    say pp(.bsf~new("java.lang.String", name, publicId, systemId)~toString)


::class "saxHandler"

::method characters
  use arg textCharArray, start, length
  say pp(.bsf~new("java.lang.String", textCharArray, start, length)~toString)


::method processingInstruction
   use arg target, data
   say pp(.bsf~new("java.lang.String", target, data )~toString)

::method ignorableWhitespace
  use arg ch, start, length
  say pp(.bsf~new("java.lang.String", ch, start, length)~toString)
  say ignoreable

::method startDocument

say pp(this is the start)

::method endDocument

say pp(this is the end)

::method unknown